import pandas as pd
import sqlite3
import json
from collections import defaultdict

# 连接数据库（与 app.py 中路径一致）
conn = sqlite3.connect('../index/boss_job_data.db')
cursor = conn.cursor()

# 查询 jobName 和 skills 字段（关键修改：新增字段）
cursor.execute('SELECT jobName, skills FROM t_job_info')
rows = cursor.fetchall()
conn.close()

# 初始化技能计数器（关键新增逻辑）
skill_counter = defaultdict(int)

for row in rows:
    job_name, skills_str = row  # 获取 jobName 和 skills 字段

    # 步骤1：筛选 jobName 包含 "java" 的记录（不区分大小写）
    if 'java' not in job_name.lower():
        continue  # 跳过不匹配的记录

    # 步骤2：解析 skills 数组（参考 app.py 中 gps 字段的解析逻辑）
    if not skills_str:
        continue  # 跳过空 skills 数据
    try:
        # 替换单引号为双引号以兼容 JSON 格式
        skills_clean = skills_str.replace("'", "\"")
        skills_list = json.loads(skills_clean)  # 转换为真实数组

        # 步骤3：统计技能元素出现次数
        for skill in skills_list:
            skill_counter[skill] += 1
    except json.JSONDecodeError:
        print(f"解析失败，原始数据：{skills_str}（请检查 skills 字段是否为合法 JSON 数组）")
        continue

# 转换为 DataFrame 并按出现次数排序（关键新增逻辑）
df_skill_count = pd.DataFrame.from_dict(
    skill_counter,
    orient='index',
    columns=['出现次数']
).rename_axis('技能').sort_values('出现次数', ascending=False)

# 保存统计结果（修改原保存逻辑）
df_skill_count.to_csv('java相关职位技能出现次数统计.csv')
